package sword.chapter1Integer;

/**
 * 二进制相加
 * 类似链表相加，大于多少进制数后会进一
 *
 * @author K
 * @date 2021-10-10 17:22
 */
public class S2AddBinary {

    public static String addBinary(String a, String b) {
        StringBuilder sb = new StringBuilder();
        int al = a.length() - 1;
        int bl = b.length() - 1;
        int carry = 0;
        while (al >= 0 || bl >= 0) {
            //字符相减，对应到ASCII码相减得到整数值，例如 c'-'a' 的就是：2     '1' - '0' 1
            int av = al >= 0 ? a.charAt(al--) - '0' : 0;
            int bv = bl >= 0 ? b.charAt(bl--) - '0' : 0;

            int sum = av + bv + carry;
            carry = sum >= 2 ? 1 : 0;
            sb.append(sum % 2);
        }
        if (carry == 1) {
            sb.append("1");
        }

        return sb.reverse().toString();
    }

    public static void main(String[] args) {
        String result = addBinary("10", "11");
        System.out.println(result);
    }
}
